From 824bd8fc88ffd9ef5614df706189e78dac2d0122 Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Thu, 16 Mar 2006 12:20:59 -0700 Subject: [PATCH] [IA64] remaining privified insns removed Privified insns replaced by hyperprivops. Signed-off-by: Tristan Gingold --- .../arch/ia64/xen/hypercall.S | 62 ++++++++++++++++--- linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S | 12 ---- .../include/asm-ia64/xen/privop.h | 5 ++ 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S index 6fb0a90520..6a12ed9ec3 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S @@ -254,7 +254,6 @@ GLOBAL_ENTRY(xen_set_kr) st8 [r11]=r10 ;; br.ret.sptk.many rp - ;; END(xen_set_rr) GLOBAL_ENTRY(xen_fc) @@ -264,7 +263,16 @@ GLOBAL_ENTRY(xen_fc) (p7) fc r32;; (p7) br.ret.sptk.many rp ;; - ptc.e r96 // this is a "privified" fc r32 + movl r9=XSI_PSR_IC + mov r8=r32 + ;; + ld8 r10=[r9] + ;; + st8 [r9]=r0 + ;; + XEN_HYPER_FC + ;; + st8 [r9]=r10 ;; br.ret.sptk.many rp END(xen_fc) @@ -276,7 +284,16 @@ GLOBAL_ENTRY(xen_get_cpuid) (p7) mov r8=cpuid[r32];; (p7) br.ret.sptk.many rp ;; - mov r72=rr[r32] // this is a "privified" mov r8=cpuid[r32] + movl r9=XSI_PSR_IC + mov r8=r32 + ;; + ld8 r10=[r9] + ;; + st8 [r9]=r0 + ;; + XEN_HYPER_GET_CPUID + ;; + st8 [r9]=r10 ;; br.ret.sptk.many rp END(xen_get_cpuid) @@ -288,7 +305,16 @@ GLOBAL_ENTRY(xen_get_pmd) (p7) mov r8=pmd[r32];; (p7) br.ret.sptk.many rp ;; - mov r72=pmc[r32] // this is a "privified" mov r8=pmd[r32] + movl r9=XSI_PSR_IC + mov r8=r32 + ;; + ld8 r10=[r9] + ;; + st8 [r9]=r0 + ;; + XEN_HYPER_GET_PMD + ;; + st8 [r9]=r10 ;; br.ret.sptk.many rp END(xen_get_pmd) @@ -301,10 +327,20 @@ GLOBAL_ENTRY(xen_get_eflag) (p7) mov r8=ar24;; (p7) br.ret.sptk.many rp ;; - mov ar24=r72 // this is a "privified" mov r8=ar.eflg + movl r9=XSI_PSR_IC + mov r8=r32 + ;; + ld8 r10=[r9] + ;; + st8 [r9]=r0 + ;; + XEN_HYPER_GET_EFLAG + ;; + st8 [r9]=r10 ;; br.ret.sptk.many rp END(xen_get_eflag) + // some bits aren't set if pl!=0, see SDM vol1 3.1.8 GLOBAL_ENTRY(xen_set_eflag) movl r8=running_on_xen;; @@ -313,11 +349,17 @@ GLOBAL_ENTRY(xen_set_eflag) (p7) mov ar24=r32 (p7) br.ret.sptk.many rp ;; - // FIXME: this remains no-op'd because it generates - // a privileged register (general exception) trap rather than - // a privileged operation fault - //mov ar24=r32 + movl r9=XSI_PSR_IC + mov r8=r32 + ;; + ld8 r10=[r9] + ;; + st8 [r9]=r0 + ;; + XEN_HYPER_SET_EFLAG + ;; + st8 [r9]=r10 ;; br.ret.sptk.many rp -END(xen_get_eflag) +END(xen_set_eflag) #endif diff --git a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S index d53b52ab37..793d1b4abd 100644 --- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S +++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S @@ -723,15 +723,11 @@ ENTRY(dirty_bit) movl r30=1f // load continuation point in case of nested fault ;; #ifdef CONFIG_XEN -#if 1 mov r18=r8; mov r8=r16; XEN_HYPER_THASH;; mov r17=r8; mov r8=r18;; -#else - tak r17=r80 // "privified" thash -#endif #else thash r17=r16 // compute virtual address of L3 PTE #endif @@ -812,15 +808,11 @@ ENTRY(iaccess_bit) #endif /* CONFIG_ITANIUM */ ;; #ifdef CONFIG_XEN -#if 1 mov r18=r8; mov r8=r16; XEN_HYPER_THASH;; mov r17=r8; mov r8=r18;; -#else - tak r17=r80 // "privified" thash -#endif #else thash r17=r16 // compute virtual address of L3 PTE #endif @@ -898,15 +890,11 @@ ENTRY(daccess_bit) movl r30=1f // load continuation point in case of nested fault ;; #ifdef CONFIG_XEN -#if 1 mov r18=r8; mov r8=r16; XEN_HYPER_THASH;; mov r17=r8; mov r8=r18;; -#else - tak r17=r80 // "privified" thash -#endif #else thash r17=r16 // compute virtual address of L3 PTE #endif diff --git a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h index 235197b8f4..af1685b4db 100644 --- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h +++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h @@ -33,6 +33,11 @@ #define XEN_HYPER_GET_RR break 0x10 #define XEN_HYPER_SET_RR break 0x11 #define XEN_HYPER_SET_KR break 0x12 +#define XEN_HYPER_FC break 0x13 +#define XEN_HYPER_GET_CPUID break 0x14 +#define XEN_HYPER_GET_PMD break 0x15 +#define XEN_HYPER_GET_EFLAG break 0x16 +#define XEN_HYPER_SET_EFLAG break 0x17 #endif #ifndef __ASSEMBLY__ -- 2.30.2